// 简化版Express服务器（JavaScript版本）
const express = require('express')
const cors = require('cors')
const helmet = require('helmet')
const compression = require('compression')
const rateLimit = require('express-rate-limit')
require('dotenv').config()

// 内存缓存
const memoryCache = new Map()
const CACHE_TTL = 5 * 60 * 1000 // 5分钟

// 简单的内存缓存管理
const cacheManager = {
  set: (key, value, ttl = CACHE_TTL) => {
    const expireTime = Date.now() + ttl
    memoryCache.set(key, { value, expireTime })
  },
  get: (key) => {
    const cached = memoryCache.get(key)
    if (!cached) return null
    if (Date.now() > cached.expireTime) {
      memoryCache.delete(key)
      return null
    }
    return cached.value
  },
  delete: (key) => {
    memoryCache.delete(key)
  },
  clear: () => {
    memoryCache.clear()
  },
  size: () => memoryCache.size
}

const app = express()
const PORT = process.env.PORT || 3001

// 安全中间件
app.use(helmet())

// CORS配置
app.use(cors({
  origin: process.env.FRONTEND_URL || 'http://localhost:3000',
  credentials: true,
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization']
}))

// 压缩响应
app.use(compression())

// 请求体解析
app.use(express.json({ limit: '10mb' }))
app.use(express.urlencoded({ extended: true, limit: '10mb' }))

// 请求限流
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15分钟
  max: 1000, // 限制每个IP 15分钟内最多1000个请求
  message: {
    error: '请求过于频繁，请稍后再试'
  },
  standardHeaders: true,
  legacyHeaders: false
})
app.use('/api', limiter)

// 健康检查
app.get('/health', async (req, res) => {
  res.json({
    status: 'healthy',
    timestamp: new Date().toISOString(),
    message: 'MySQL后端服务运行正常',
    database: 'MySQL连接配置完成',
    cache: {
      type: 'memory',
      size: cacheManager.size(),
      status: 'active'
    },
    version: '1.0.0'
  })
})

// 测试API路由
app.get('/api/test', (req, res) => {
  res.json({
    message: 'MySQL后端API测试成功！',
    timestamp: new Date().toISOString(),
    database: {
      host: '10.110.110.8',
      port: 3306,
      database: 'search_dashboard',
      status: '已配置'
    }
  })
})

// 用户认证测试路由
app.post('/api/auth/test', (req, res) => {
  res.json({
    message: '认证API准备就绪',
    features: [
      '用户注册',
      '用户登录',
      'JWT令牌管理',
      '密码加密'
    ]
  })
})

// 书签管理测试路由
app.get('/api/bookmarks/test', (req, res) => {
  res.json({
    message: '书签API准备就绪',
    features: [
      '获取书签列表',
      '添加书签',
      '更新书签',
      '删除书签',
      '书签排序'
    ]
  })
})

// 404处理
app.use('*', (req, res) => {
  res.status(404).json({
    error: '接口不存在',
    path: req.originalUrl,
    availableEndpoints: [
      'GET /health - 健康检查',
      'GET /api/test - API测试',
      'POST /api/auth/test - 认证测试',
      'GET /api/bookmarks/test - 书签测试'
    ]
  })
})

// 全局错误处理
app.use((error, req, res, next) => {
  console.error('服务器错误:', error)
  res.status(500).json({
    error: '服务器内部错误',
    message: error.message,
    timestamp: new Date().toISOString()
  })
})

// 启动服务器
app.listen(PORT, () => {
  console.log(`🚀 MySQL后端服务器启动成功！`)
  console.log(`📍 服务地址: http://localhost:${PORT}`)
  console.log(`🏥 健康检查: http://localhost:${PORT}/health`)
  console.log(`🧪 API测试: http://localhost:${PORT}/api/test`)
  console.log(`🗄️ 数据库: MySQL @ 10.110.110.8:3306`)
  console.log(`🌍 环境: ${process.env.NODE_ENV || 'development'}`)
  console.log(`\n✅ 服务器已准备就绪，可以开始测试API接口！`)
})

module.exports = app